﻿// 372. 取模问题 Pseudoprime numbers（挑战程序设计竞赛）.cpp : 此文件包含 "main" 函数。程序执行将在此处开始并结束。
//

#include <iostream>

using  namespace std;

/*
https://www.papamelon.com/problem/372


给定一个整数p，一个整数a，判断是否满足：
p 是非质数
a^p=a(mod p)：先求
a^p，然后将结果除以p，看看余数是否等于a
输入
多组测试数据
每组测试数据占据一行，两个整数
p(2<p≤1000000000),a(1<a<p)
最后一行两个0 作为结束标记，不需要处理
输出
每组测试数据输出一行，yes 表示满足，no 表示不满足
样例 1
输入
3 2
10 3
341 2
341 3
1105 2
1105 3
0 0
输出
no
no
yes
no
yes
yes
*/

long long a, p;


long long fastmi(long long a, long long b, long long mod) {
	long long ans = 1;
	while (b) {
		if (b & 1) {
			ans *= a; ans %= mod;
		}
		a = a *a%mod;
		b = b >> 1;
	}

	return ans;
}


bool isPrime(long long num) {
	if (num < 2)    return false;
	for (long long i = 2; i <=  (num)/i; i++) {
		if (num % i == 0)    return false;
	}
	return true;
}


void solve() {
	if (isPrime(p)) {
		cout << "no" << endl;
		return;
	}
	long long ret = fastmi(a,p,p);
	if (ret == a) {
		cout << "yes" << endl;
	}
	else {
		cout << "no" << endl;
	}
}


int main()
{
	while (cin >> p >> a) {
		if (a == 0 && p == 0) { break; }
		solve();
	}

	return 0;
}

 